<?php

/*
	info: 系统实用静态方法
	base: 无
	$Id: utility.class.php 13 2011-03-25 08:33:49Z lfly1573@gmail.com $
*/

if (!defined('WEB_IN'))
{
	header("HTTP/1.0 404 Not Found");
	exit();
}

final class Utility
{

	/**
	 * 分页函数
	 * @param $intAllNum 总记录数
	 * @param $intPerNum 每页显示数
	 * @param $intCurPage 当前页
	 * @param $strLinkUrl 分页链接地址
	 * @param $intShowLinks 显示的分页个数(奇数)
	 * @param $intMaxPage 显示的最大页码数
	 * @param $strSign 页码替换标识
	 * @return array 页码数组
	 */
	public static function Page($intAllNum, $intPerNum, $intCurPage, $strLinkUrl, $intShowLinks = 7, $intMaxPage = 0, $strSign = '@@')
	{
		$intAllNum = abs(intval($intAllNum));
		$intPerNum = max(1, intval($intPerNum));
		$intCurPage = max(1, intval($intCurPage));
		$intShowLinks = max(1, intval($intShowLinks));
		$intMaxPage = abs(intval($intMaxPage));
		$returnArray = array();

		if ($intAllNum > 0)
		{
			$allAbsPages = $allPages = $startPage = $endPage = 0;
			$allAbsPages = ceil($intAllNum/$intPerNum);
			$allPages = ($intMaxPage>0 && $intMaxPage<$allAbsPages) ? $intMaxPage : $allAbsPages;
			$intCurPage = ($intCurPage > $allPages) ? $allPages : $intCurPage;

			$startPage = $intCurPage-floor($intShowLinks/2);
			$endPage = $intCurPage+floor($intShowLinks/2);
			if ($startPage>0 && $endPage>$allPages)
			{
				$startPage = ($endPage-$allPages < $startPage) ? $startPage-$endPage+$allPages : 1;
				$endPage = $allPages;
			}
			elseif ($startPage<=0 && $endPage<=$allPages)
			{
				$endPage = ($endPage-$startPage+1 <= $allPages) ? $endPage-$startPage+1 : $allPages;
				$startPage = 1;
			}
			elseif ($startPage<=0 && $endPage>$allPages)
			{
				$startPage = 1;
				$endPage = $allPages;
			}

			$returnArray['datanum'] = $intAllNum;
			$returnArray['pernum'] = $intPerNum;
			$returnArray['pagenum'] = $allPages;
			$returnArray['curpage'] = $intCurPage;
			$returnArray['page'] = array();

			if ($strLinkUrl != '')
			{
				$returnArray['prev'] = ($intCurPage > 1) ? str_replace($strSign, $intCurPage-1, $strLinkUrl) : '';
				$returnArray['first'] = ($startPage > 1) ? str_replace($strSign, 1, $strLinkUrl) : '';
				$returnArray['front'] = ($startPage > 2) ? str_replace($strSign, ceil((1+$startPage)/2), $strLinkUrl) : '';
				for ($i=$startPage; $i<=$endPage; $i++)
				{
					$returnArray['page'][$i] = str_replace($strSign, $i, $strLinkUrl);
				}
				$returnArray['back'] = ($endPage < $allPages-1) ? str_replace($strSign, ceil(($endPage+$allPages)/2), $strLinkUrl) : '';
				$returnArray['last'] = ($endPage < $allPages) ? str_replace($strSign, $allPages, $strLinkUrl) : '';
				$returnArray['next'] = ($intCurPage < $allPages) ? str_replace($strSign, $intCurPage+1, $strLinkUrl) : '';
				$returnArray['input'] = ($startPage>2 || $endPage<$allPages-1) ? 'onKeyDown="javascript:if(window.event.keyCode==13 && this.value!=\'\'){var pageUrlTpl=\''.$strLinkUrl.'\';window.location=pageUrlTpl.replace(/'.$strSign.'/gi, this.value);}"' : '';
			}
			else
			{
				$returnArray['prev'] = ($intCurPage > 1) ? $intCurPage-1 : 0;
				$returnArray['first'] = ($startPage > 1) ? 1 : 0;
				$returnArray['front'] = ($startPage > 2) ? ceil((1+$startPage)/2) : 0;
				for ($i=$startPage; $i<=$endPage; $i++)
				{
					$returnArray['page'][$i] = $i;
				}
				$returnArray['back'] = ($endPage < $allPages-1) ? ceil(($endPage+$allPages)/2) : 0;
				$returnArray['last'] = ($endPage < $allPages) ? $allPages : 0;
				$returnArray['next'] = ($intCurPage < $allPages) ? $intCurPage+1 : 0;
				$returnArray['input'] = ($startPage>2 || $endPage<$allPages-1) ? 1 : 0;
			}
		}
		
		return $returnArray;
	}

	/**
	 * 检查数组中是否有某个值
	 * @param $strVar 要检查的值
	 * @param $aryVar 查找的数组
	 * @param $strKey 指定比较二维数组的某个键值
	 * @param $bolReturnArray 是否返回数组格式
	 * @return mix 对应键值
	 */
	public static function SearchArray($strVar, $aryVar, $strKey = '', $bolReturnArray = FALSE)
	{
		$returnArray = array();
		foreach ($aryVar as $k => $v)
		{
			if ($strKey == '')
			{
				if ($v == $strVar)
				{
					if (!$bolReturnArray)
					{
						return $k;
					}
					else
					{
						$returnArray[] = $k;
					}
				}
			}
			else
			{
				if (isset($v[$strKey]) && $v[$strKey]==$strVar)
				{
					if (!$bolReturnArray)
					{
						return $k;
					}
					else
					{
						$returnArray[] = $k;
					}
				}
			}
		}
		if (!$bolReturnArray)
		{
			return FALSE;
		}
		else
		{
			return $returnArray;
		}
	}


	/******************************************/


	/* 构造函数 不允许执行 */
	private function __construct(){}

}	//end class

?>